<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    // Symbol 每个属性的名字都是独一无二的 从根本上防止属性名的冲突 (JS新增数据类型之一)
    // ES6 引入了一种新的原始数据类型Symbol，表示独一无二的值

    // 对象的属性名现在可以有两种类型，一种是原来就有的字符串，另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型，就都是独一无二的，可以保证不会与其他属性名产生冲突。

    // 1. 作为对象属性名的 Symbol  => 取值和赋值都要借助指定symbol数据
    // var s1 = Symbol("name");

    // var zhang = {
    //     name:"张三",
    //     age:18,
    //     say:function(){
    //         console.log(this.name,this.age);
    //     },
    //     [s1]:"嘿嘿", // 对象创建过程中  将变量拼接到对象中 作为对象的键名 (了解)
    // }

    // // 赋值
    // zhang[s1] = "李四";
    // console.log(zhang);

    // // 取值
    // console.log(zhang[s1]);


    // 消除魔术字符串  魔术字符串指的是，在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码，应该尽量消除魔术字符串，改由含义清晰的变量代替。

    // 魔术字符串
    // function judge(type,con){
    //     var user = /^[a-zA-Z_$][\w$]{5,11}$/,
    //         pwd = /^[\w$]{6,12}$/,
    //         phone =/^1[3-9]\d{9}$/,
    //         email =/^\w+@\w+\.(com|cn|email)$/;

    //     if(type === "user"){
    //         return user.test(con)
    //     }else if(type === "pwd"){
    //         return pwd.test(con);
    //     }else if(type === "phone"){
    //         return phone.test(con);
    //     }else if(type === "email"){
    //         return email.test(con);
    //     }
    // }

    // var result = judge("user","a123123")
    // console.log(result);


    // 消除魔术字符串 
    // var types = {
    //     user: "user",
    //     pwd: "pwd",
    //     email: "email",
    //     phone: "phone",
    // }

    // var types = {
    //     user: [],
    //     pwd: {},
    //     email: Symbol("email"),
    //     phone: function(){},
    // }
    var types = {
        user: Symbol(),
        pwd: Symbol(),
        email:Symbol(),
        phone: Symbol(),
    }

    function judge(type, con) {
        var user = /^[a-zA-Z_$][\w$]{5,11}$/,
            pwd = /^[\w$]{6,12}$/,
            phone = /^1[3-9]\d{9}$/,
            email = /^\w+@\w+\.(com|cn|email)$/;

        if (type === types.user) {
            return user.test(con)
        } else if (type === types.pwd) {
            return pwd.test(con);
        } else if (type === types.phone) {
            return phone.test(con);
        } else if (type === types.email) {
            return email.test(con);
        }
    }

    var result = judge(types.user, "a123123")
    console.log(result);


</script>

</html>